home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / perl / jinx.lha / menus.pl < prev    next >
Text File  |  1993-08-13  |  12KB  |  303 lines

  1.  
  2. # menus.pl -- Copyright (c) 1990, Henk P. Penning.
  3. # You may distribute under the terms of the GNU General Public License
  4. # as specified in the README file that comes with the Jinx 2.1 kit.
  5.  
  6. sub addMenu
  7.   { local(*Menu,$entry,$choice,$tag,$help) = @_ ;
  8.     push(@Menu,$entry) ;
  9.     if ( $entry !~ /arrow=/ )
  10.       { $Menu{$choice} = $tag ;
  11.         $Menu{"help_$choice"} = $help ;
  12.     if ( $entry =~ /TAB=/ )
  13.           { $Menu{'KEY_TAB'} = $choice ;
  14.             $Menu{"help_KEY_TAB"} = $help ;
  15.       }
  16.       }
  17.     else
  18.       { if ( $entry =~ /^arrow=/ )
  19.           { $Menu{'KEY_LEFT'}       = 'left' ;
  20.             $Menu{'KEY_DOWN'}       = 'down' ;
  21.             $Menu{'KEY_UP'}         = 'up' ;
  22.         $Menu{'KEY_RIGHT'}      = 'right' ;
  23.             $Menu{'help_KEY_LEFT'}  = 'move view left' ;
  24.             $Menu{'help_KEY_DOWN'}  = 'move cursor down' ;
  25.             $Menu{'help_KEY_UP'}    = 'move cursor up' ;
  26.             $Menu{'help_KEY_RIGHT'} = 'move view right' ;
  27.           }
  28.         if ( $entry =~ /left.*arrow=/ )
  29.           { $Menu{'KEY_LEFT'}       = 'left' ;
  30.             $Menu{"help_KEY_LEFT"}  = $choice ;
  31.       }
  32.         if ( $entry =~ /down.*arrow=/ )
  33.           { $Menu{'KEY_DOWN'}       = 'down' ;
  34.             $Menu{"help_KEY_DOWN"}  = $choice ;
  35.       }
  36.         if ( $entry =~ /up.*arrow=/ )
  37.           { $Menu{'KEY_UP'}         = 'up' ;
  38.             $Menu{"help_KEY_UP"}    = $choice ;
  39.       }
  40.         if ( $entry =~ /right.*arrow=/ )
  41.           { $Menu{'KEY_RIGHT'}      = 'right' ;
  42.             $Menu{"help_KEY_RIGHT"} = $choice ;
  43.       }
  44.       }
  45.   }
  46.  
  47. sub makeMenu
  48.   { local(*Menu) = @_ ;
  49.     local($cnt,$curlen) = (-1,$maxMenuWidth) ;
  50.     local(@res,$entry,$i,$strlen,$_) ;
  51.  
  52.     if ( defined $Menu{'SAVE_SIZE'} )
  53.       { $#Menu += $Menu{'SAVE_SIZE'} ;
  54.         splice(@Menu,0,$#Menu-$Menu{'SAVE_SIZE'}+1) ;
  55.       }
  56.  
  57.     for $entry ( @Menu )
  58.       { $_ = ( $i == $#Menu ) ? "or $entry" : "$entry," ;
  59.     $strlen = length ;
  60.     if ( $strlen > $maxMenuWidth )
  61.       { &addlog("maxMenuWidth $maxMenuWidth") unless $menuError ;
  62.         &addlog("Too wide: $_") ;
  63.         $menuError = 1 ;
  64.       }
  65.         if ( $curlen + $strlen >= $maxMenuWidth )
  66.           { $cnt++ ;
  67.             push(@res,$_) ;
  68.             $curlen = $strlen ;
  69.           }
  70.         else
  71.           { $curlen += ($strlen+1) ;
  72.             $res[$cnt] .= ( ' ' . $_ ) ;
  73.           }
  74.     $i++ ;
  75.       }
  76.     $Menu{'SAVE_SIZE'} = $#Menu+1 ;
  77.     unshift(@Menu,@res) ;
  78.     $#Menu = $#res ;
  79.     return $#Menu ;
  80.   }
  81.  
  82. %metaMenu = () ;
  83. @metaMenu = () ;
  84. &addMenu(*metaMenu,"arrow=scroll") ;
  85. &addMenu(*metaMenu,"n)ext",'n','next','show next data page') ;
  86. &addMenu(*metaMenu,"p)rev",'p','prev','show previous data page') ;
  87. &addMenu(*metaMenu,"g)oto",'g','goto','ask record number; show record') ;
  88. &addMenu(*metaMenu,"/=search",'/','search','ask regexp; show matching record') ;
  89. &addMenu(*metaMenu,";=re-search",';','re-search',
  90.   'search with previous regexp; show matching record') ;
  91. &addMenu(*metaMenu,"i)nspect",'i','inspect','show data record by record') ;
  92. &addMenu(*metaMenu,"D)escr",'D','Descr','inspect and change descriptor') ;
  93. &addMenu(*metaMenu,"P)roject",'P','Project','select columns by name') ;
  94. &addMenu(*metaMenu,"J)oin",'J','Join','join database on cols with same name') ;
  95. &addMenu(*metaMenu,"O)rder",'O','Order','sort on specific keys' ) ;
  96. &addMenu(*metaMenu,"T)est all",'T','Test','test if records match the cpats') ;
  97. &addMenu(*metaMenu,"A)dd field",'A','Add field','add a field to the database') ;
  98. &addMenu(*metaMenu,"s)ave",'s','save','save current database') ;
  99. &addMenu(*metaMenu,"S)ave as",'S','Save as','save db under specific name') ;
  100. &addMenu(*metaMenu,"o)pen",'o','open','open a new database') ;
  101. &addMenu(*metaMenu,"G)uess",'G','Guess','ask file and separator, build db') ;
  102. &addMenu(*metaMenu,"C)lear",'C','Clear','Forget about current database') ;
  103. &addMenu(*metaMenu,"V)iew toggle",'V','View','Toggles view in collumns') ;
  104. &addMenu(*metaMenu,"TAB=q)uit",'q','quit','leave jinx') ;
  105. &addMenu(*metaMenu,"Q)uit without save",'Q','QUIT','leave jinx; no update') ;
  106.  
  107. %mainMenu = () ;
  108. @mainMenu = () ;
  109. &addMenu(*mainMenu,'arrow=scroll') ;
  110. &addMenu(*mainMenu,"n)ext",'n','next','show next record') ;
  111. &addMenu(*mainMenu,"p)rev",'p','previous','show previous record') ;
  112. &addMenu(*mainMenu,"g)oto",'g','goto','ask number; show record') ;
  113. &addMenu(*mainMenu,"/=search",'/','search','ask pattern; search record') ;
  114. &addMenu(*mainMenu,";=re-search",';','re-search',
  115.   'search with previous regexp; show matching record') ;
  116. &addMenu(*mainMenu,"u)pdate",'u','update','edit current record') ;
  117. &addMenu(*mainMenu,"a)dd",'a','add','add empty record; edit') ;
  118. &addMenu(*mainMenu,"c)opy",'c','copy','copy current record; edit') ;
  119. &addMenu(*mainMenu,"d)elete",'d','delete','delete current record') ;
  120. &addMenu(*mainMenu,"U)ndo",'U','Undo','put back deleted records') ;
  121. &addMenu(*mainMenu,"C)ompute",'C','Compute',
  122.   'compute new values for one or more columns') ;
  123. &addMenu(*mainMenu,"E)xtract",'E','Extract','Extract selection') ;
  124. &addMenu(*mainMenu,"D)elete",'D','Delete','Delete selection') ;
  125. &addMenu(*mainMenu,"P)eek",'P','Peek',
  126.   'ask for database; present records to select') ;
  127. &addMenu(*mainMenu,"R)ead",'R','Read',
  128.   'ask for database; present only new records to select') ;
  129. &addMenu(*mainMenu,"K)ey test",'K','Key test',
  130.   'ask key-fields; test if keys are unique (if no keys, uniq records)') ;
  131. &addMenu(*mainMenu,"O)rder",'O','Order','sort on specific keys' ) ;
  132. &addMenu(*mainMenu,"t)est",'t','test','test if fields match cpats') ;
  133. &addMenu(*mainMenu,"T)est all",'T','Test','test if all records match cpats') ;
  134. &addMenu(*mainMenu,"TAB=f)inish",'f','finish','leave inspect mode') ;
  135. &addMenu(*mainMenu,"Q)uit without save",'Q','QUIT','leave jinx; no update') ;
  136.  
  137. %selectFromMenu = () ;
  138. @selectFromMenu = () ;
  139. &addMenu(*selectFromMenu,"arrow=scroll") ;
  140. &addMenu(*selectFromMenu,"n)ext",'n','next','show next record') ;
  141. &addMenu(*selectFromMenu,"p)rev",'p','previous','show previous record') ;
  142. &addMenu(*selectFromMenu,"g)oto",'g','goto','ask number; show record') ;
  143. &addMenu(*selectFromMenu,"/=search",'/','search','ask pattern; search record') ;
  144. &addMenu(*selectFromMenu,";=re-search",';','re-search',
  145.   'search with previous regexp; show matching record') ;
  146. &addMenu(*selectFromMenu,">=next mark",'>','next mark',
  147.   'goto next marked record') ;
  148. &addMenu(*selectFromMenu,"<=prev mark",'<','previous mark',
  149.   'goto previous marked record') ;
  150. &addMenu(*selectFromMenu,")=next unmark",')','next unmark',
  151.   'goto next unmarked record') ;
  152. &addMenu(*selectFromMenu,"(=prev unmark",'(','previous unmark',
  153.   'goto previous unmarked record') ;
  154. &addMenu(*selectFromMenu,"t)oggle",'t','toggle','toggle marking') ;
  155. &addMenu(*selectFromMenu,"T)oggle",'T','Toggle all',
  156.   'toggle marking of all records') ;
  157. &addMenu(*selectFromMenu,"C)lear",'C','Clear marks',
  158.   'unmark all records') ;
  159. &addMenu(*selectFromMenu,"M)ark",'M','Mark subset','ask patterns; mark') ;
  160. &addMenu(*selectFromMenu,"U)nmark",'U','Unmark subset','ask patterns; unmark') ;
  161. &addMenu(*selectFromMenu,"s)elect one",'s','select',
  162.   'select only the current record') ;
  163. &addMenu(*selectFromMenu,"S)elect marked",'S','select marked',
  164.   'select all marked records') ;
  165. &addMenu(*selectFromMenu,"TAB=ex)it select",'x','exit',
  166.   'back to previous menu; no changes; no selection') ;
  167.  
  168. @updateMenu= () ;
  169. %updateMenu= () ;
  170. &addMenu(*updateMenu,"arrow=move cursor") ;
  171. &addMenu(*updateMenu,"TAB=finish",'','','finish update') ;
  172.  
  173. @updateXMenu= () ;
  174. %updateXMenu= () ;
  175. &addMenu(*updateXMenu,"a)ccept",'a','accept','confirm this update') ;
  176. &addMenu(*updateXMenu,"TAB=f)orget",'f','forget','leave it as it was') ;
  177. &addMenu(*updateXMenu,"e)dit",'e','edit','edit it again') ;
  178.  
  179. @updMatchMenu= () ;
  180. %updMatchMenu= () ;
  181. &addMenu(*updMatchMenu,"e)dit",'e','edit','edit it again') ;
  182. &addMenu(*updMatchMenu,"a)ccept",'a','accept','confirm this update') ;
  183. &addMenu(*updMatchMenu,"f)orget",'f','forget','leave it as it was') ;
  184. &addMenu(*updMatchMenu,"TAB=ex)it",'x','exit','abandon all changes') ;
  185.  
  186. @updReMenu= () ;
  187. %updReMenu= () ;
  188. &addMenu(*updReMenu,"e)dit",'e','edit','edit it again') ;
  189. &addMenu(*updReMenu,"f)orget",'f','forget','leave it as it was') ;
  190. &addMenu(*updReMenu,"TAB=ex)it",'x','exit','abandon all changes') ;
  191.  
  192. @dirtyMenu= () ;
  193. %dirtyMenu= () ;
  194. &addMenu(*dirtyMenu,"y)es",'y','yes','confirm') ;
  195. &addMenu(*dirtyMenu,"TAB=n)o",'n','no','deny') ;
  196.  
  197. @noKeyMenu= () ;
  198. %noKeyMenu= () ;
  199. &addMenu(*noKeyMenu,"a)dd empty data",'a','add',
  200.   'add empty join-data for this record') ;
  201. &addMenu(*noKeyMenu,"d)elete this record",'d','delete',
  202.   'don\'t join with this record') ;
  203. &addMenu(*noKeyMenu,"A)dd empty data for all undefined keys",'A','Add',
  204.   'add empty join-data for all records that don\'t join with anything') ;
  205. &addMenu(*noKeyMenu,"D)elete all undefined keys",'D','Delete',
  206.   'don\'t join with any record that can\'t be joined with properly') ;
  207. &addMenu(*noKeyMenu,"TAB=ex)it",'x','exit','leave Join; no change') ;
  208.  
  209. @multiKeyMenu= () ;
  210. %multiKeyMenu= () ;
  211. &addMenu(*multiKeyMenu,"a)dd all",'a','add',
  212.   'join with all records') ;
  213. &addMenu(*multiKeyMenu,"A)lways add all",'A','Always add all',
  214.   'always join with all possible records') ;
  215. &addMenu(*multiKeyMenu,"d)elete this record",'d','delete',
  216.   'leave this record out of the join') ;
  217. &addMenu(*multiKeyMenu,"D)elete Multi's always",'D','Delete',
  218.   'leave out any record which can be joined with more than one record') ;
  219. &addMenu(*multiKeyMenu,"s)how to select",'s','show',
  220.   'show which records can be joined with') ;
  221. &addMenu(*multiKeyMenu,"TAB=ex)it",'x','exit','leave Join; no change') ;
  222.  
  223. @keyTestMenu= () ;
  224. %keyTestMenu= () ;
  225. &addMenu(*keyTestMenu,"n)ext",'n','next',
  226.   'skip current record; test following records') ;
  227. &addMenu(*keyTestMenu,"s)how to delete",'s','show',
  228.   'show records; delete selection') ;
  229. &addMenu(*keyTestMenu,"f)inish",'f','finish',
  230.   'leave Keytest; make changes indicated sofar') ;
  231. &addMenu(*keyTestMenu,"TAB=ex)it",'x','exit','leave Keytest; no change') ;
  232.  
  233. @searchMenu= () ;
  234. %searchMenu= () ;
  235. &addMenu(*searchMenu,"up/down-arrow=previous entries",
  236.   'scroll through previous entries') ;
  237. &addMenu(*searchMenu,"RET=finish",'','') ;
  238. &addMenu(*searchMenu,"TAB=exit",'','') ;
  239.  
  240. @testMenu= () ;
  241. %testMenu= () ;
  242. &addMenu(*testMenu,"n)ext",'n','next','search next mismatch') ;
  243. &addMenu(*testMenu,"N)ext",'N','Next','search next record with mismatch') ;
  244. &addMenu(*testMenu,"u)pdate",'u','update','update current record') ;
  245. &addMenu(*testMenu,"TAB=ex)it",'x','exit','leave testing') ;
  246.  
  247. @getNamesMenu= () ;
  248. %getNamesMenu= () ;
  249. &addMenu(*getNamesMenu,"up/down-arrow=move cursor",'move cursor') ;
  250. &addMenu(*getNamesMenu,"right-arrow=select",'select/de-select') ;
  251. $getNamesMenu{'KEY_RIGHT'} = 'select' ;
  252. $getNamesMenu{'help_KEY_RIGHT'} = 'select current name' ;
  253. $getNamesMenu{'l'} = 'select' ;
  254. $getNamesMenu{'help_l'} = 'select current name' ;
  255. &addMenu(*getNamesMenu,"left-arrow=delete") ;
  256. $getNamesMenu{'KEY_LEFT'} = 'delete' ;
  257. $getNamesMenu{'help_KEY_LEFT'} = 'de-select current name' ;
  258. $getNamesMenu{'h'} = 'delete' ;
  259. $getNamesMenu{'help_h'} = 'de-select current name' ;
  260. &addMenu(*getNamesMenu,"i)ncr",'i','increment',
  261.   'move current name up in the list') ;
  262. &addMenu(*getNamesMenu,"d)ecr",'d','decrement',
  263.   'move current name down in the list') ;
  264. &addMenu(*getNamesMenu,"s)how",'s','show',
  265.   'show the current list by name') ;
  266. &addMenu(*getNamesMenu,"f)inish",'f','finish',
  267.   'leave select mode') ;
  268. &addMenu(*getNamesMenu,"TAB=ex)it",'x','exit',
  269.   'abandon select; no change') ;
  270.  
  271. @doDescrMenu= () ;
  272. %doDescrMenu= () ;
  273. &addMenu(*doDescrMenu,"up/down-arrow=move cursor",'move cursor') ;
  274. &addMenu(*doDescrMenu,"p)at edit",'p','pat edit','edit patterns') ;
  275. &addMenu(*doDescrMenu,"n)ame edit",'n','name edit','update names') ;
  276. &addMenu(*doDescrMenu,"f)inish",'f','finish','finish updating') ;
  277. &addMenu(*doDescrMenu,"TAB=ex)it",'x','exit','leave; no updates') ;
  278.  
  279. sub initMenus {
  280.   local($maxMenuWidth) = @_ ;
  281.   $maxMenuSize = &max(
  282.     &makeMenu(*metaMenu),
  283.     &makeMenu(*mainMenu),
  284.     &makeMenu(*updateMenu),
  285.     &makeMenu(*updateXMenu),
  286.     &makeMenu(*updReMenu),
  287.     &makeMenu(*updMatchMenu),
  288.     &makeMenu(*searchMenu),
  289.     &makeMenu(*dirtyMenu),
  290.     &makeMenu(*noKeyMenu),
  291.     &makeMenu(*multiKeyMenu),
  292.     &makeMenu(*keyTestMenu),
  293.     &makeMenu(*selectFromMenu),
  294.     &makeMenu(*testMenu),
  295.     &makeMenu(*getNamesMenu),
  296.     &makeMenu(*doDescrMenu)
  297.   ) ;
  298.  
  299.   &QUIT('terminal not wide enough for menu.') if $menuError ;
  300. }
  301.  
  302. 1;
  303.